package tianhao.luo.algorithm;

/**
 * 汉诺塔
 * @author: tianhao.luo@hand-china.com 2021/6/28  下午10:04
 */
public class Hanoitower {

    /**
     * 汉诺塔移动方法
     * 使用分治算法
     * @param num a位置塔上的除最下一个的上面所有
     * @param a 塔 起始放了盘的塔
     * @param b 塔 用于存放除最下边的上面所有盘
     * @param c 塔 目标塔
     */
    public void hanoiTower(int num,char a,char b,char c){
        // 如果只有一个盘
        if (num == 1){
            System.out.println("第1个盘从"+a +"->"+c);
        }else {
            // 如果有n>=2个,我们总是可以看做是 两个盘, 1.最下边的一个盘 2.上面的所有盘
            // 1.先把最上面的所有盘A->B,移动过程会使用到c
            hanoiTower(num -1,a,c,b);
            // 2.把最下边的盘A->C
            System.out.println("第"+num +"个盘从"+a+"->"+c);
            // 3.把B塔所有的盘移动到C
            hanoiTower(num-1,b,a,c);
        }
    }
}
